#include <stdio.h>
#include <fftw3.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <pcm_to_wav.h>
#include "hello.h"

// 定义输入音频文件名和采样率
#define INPUT_FILENAME "../pcm/out.pcm"
#define SAMPLE_RATE 16000

#define HAIER_PCM_CHANNEL_NUM 6
#define HAIER_MIC_HCANNEL_NUM 4
#define FFT_SIZE 1024

typedef struct singlePcm
{
    /* data */
    short pcm_data[FFT_SIZE];
    double amplitude;
    double dbValue;

}singlePcmInfo;


int main()
{
    short read_buffer[FFT_SIZE];
    wav_translate_to_pcm("../pcm/500_6.wav", "../pcm/out.pcm");
    size_t file_size = get_file_size("./../pcm/out.pcm");

    printf("file size == %ld  %ld\n", file_size, sizeof(double));


    // 录音后的音频原始文件里有6个声道，前四个为mic录音数据，后两个为参考音数据
    // 为16位数据，所以数据存放方式 00 11 22 33 44 55 
    // 我们取1024组数据来进行fft处理，6组数据位 1020 * 6；

    get_pcm_data_by_channel_num(INPUT_FILENAME,5,6,FFT_SIZE,read_buffer);

    //save_data_to_file("./2.pcm",read_buffer,1024);

    // 读取输入音频数据，这里假设从文件读取，你可以根据需要进行修改
    // FILE *input_file = fopen(INPUT_FILENAME, "rb");

    // size_t num = fread(read_buffer, sizeof(short), FFT_SIZE, input_file);

    // printf("read num === %ld\n", num);
    // printf("read short --%ld\n", sizeof(read_buffer));

    // 创建 FFTW 输入和输出数组
    fftw_complex *fft_input = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * FFT_SIZE);
    fftw_complex *fft_output = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * FFT_SIZE);

    // 创建 FFTW 3.0 的计划
    fftw_plan plan = fftw_plan_dft_1d(FFT_SIZE, fft_input, fft_output, FFTW_FORWARD, FFTW_ESTIMATE);

    for (int i = 0; i < FFT_SIZE; i++)
    {
        fft_input[i][0] = (double)read_buffer[i];
        fft_input[i][1] = 0.0; // 虚部设置为零
    }

    // 执行频域变换
    fftw_execute(plan);

    // 输出频域结果（幅度谱）
    for (int i = 0; i < FFT_SIZE / 2; ++i)
    {
        double frequency = (double)(i)*SAMPLE_RATE / FFT_SIZE;
        double amplitude = sqrt(fft_output[i][0] * fft_output[i][0] + fft_output[i][1] * fft_output[i][1]) * 2 / FFT_SIZE;

        if (frequency < 1000){
            printf("Frequency: %.2f Hz, Magnitude: %.4f", frequency, amplitude);
            printf(" db=%f\n", 10 * log10(amplitude / 32768));
        }
    }

    // 销毁 FFTW 相关资源
    fftw_destroy_plan(plan);
    fftw_free(fft_input);
    fftw_free(fft_output);

    return 0;
}
